package com.zmn.oms.zmn.business.interfaces.work;

import com.zmn.oms.common.exception.OmsBaseException;
import com.zmn.oms.model.dto.visit.OrderVisitDTO;
import com.zmn.oms.model.dto.work.modify.OrderMultipleVisitDTO;
import com.zmn.oms.model.entity.visit.OrderVisit;
import com.zmn.oms.model.entity.visit.OrderVisitQuery;
import com.zmn.oms.model.entity.work.OrderWork;
import com.zmn.oms.model.vo.visit.CancelMultipleVisitVO;

import java.util.List;

/**
 * 类描述：多次上门
 *
 * @author yule
 * @date 2021/3/11 18:33
 */
public interface OrderWorkMultipleVisitBService {

    /**
     * 申请多次上门
     */
    OrderVisitDTO addOrderMultipleVisit(OrderMultipleVisitDTO orderMultipleVisitDTO) throws OmsBaseException;

    /**
     * 再次出发
     * @param orderMultipleVisitDTO
     * @throws OmsBaseException
     */
    void againSetOut(OrderMultipleVisitDTO orderMultipleVisitDTO) throws OmsBaseException;

    /**
     * 再次上门
     * @param orderMultipleVisitDTO
     * @throws OmsBaseException
     */
    void againVisit(OrderMultipleVisitDTO orderMultipleVisitDTO) throws OmsBaseException;

    /**
     * 取消再次上门
     * @param orderMultipleVisitDTO
     * @throws OmsBaseException
     */
    void cancelAgainVisit(OrderMultipleVisitDTO orderMultipleVisitDTO) throws OmsBaseException;

    /**
     * 工程师取消再次上门
     * @param orderMultipleVisitDTO
     * @throws OmsBaseException
     */
    void engineerCancelAgainVisit(OrderMultipleVisitDTO orderMultipleVisitDTO) throws OmsBaseException;

    /**
     * 取消多次上门vo
     * @param orderWork
     * @return
     */
    CancelMultipleVisitVO getCancelMultipleVisitVO(OrderWork orderWork);

    /**
     * 处理多次上门预警
     * @param orderVisit
     */
    void processMultipleVisitWarning(OrderVisit orderVisit);

    /**
     * 根据查询条件查询单个验收
     * @param orderVisitQuery
     * @return
     */
    OrderVisitDTO getOrderVisitByQuery(OrderVisitQuery orderVisitQuery);

    /**
     * 获取收款记录
     * @param orderId
     * @param masterId
     * @return
     */
    List<OrderVisitDTO> listOrderVisitByOrderIdAndMasterId(Long orderId, Integer masterId);

}
